#include <stdio.h>
#include <string.h>
#include <arpa/inet.h>

#include <checks.h>
#include <network.h>
#include <server.h>

struct game *createGame(struct client *client, char name[]){ // Создание игры
	int i;
	for (i = 0; i < gamecount; i++){ // Ищем пустую игру.
		if(games[i].play == 0){
			games[i].play = 1;
			games[i].id = idGame;
			idGame++;
			if(name == NULL){
				name = "DefaultGame\0"; 
			}
			if(strlen(name) > 32){ // Обрезаем имя игры до 32 символов
				name[31] = '\0';
			}
			strcpy(games[i].name, name);
			games[i].white = client; // <-
			
			int k, j;
			for (k = 0; k < 8; k++){
				for(j = 0; j < 8; j++){
					if (k<=2){
						if ( (k+j)%2==0 ) games[i].checkers[k][j] = 0;
						else games[i].checkers[k][j] = 1; 
					}
					else 
						if (k>=5){
							if ( (k+j)%2==0 ) games[i].checkers[k][j] = 0;
							else games[i].checkers[k][j] = -1;
						}
						else games[i].checkers[k][j] = 0;
				}
			}
			
			games[i].countchecks[0] = games[i].countchecks[1] = 12;
			games[i].num_move = 1;			
			printf("Создана игра №%d/id=%d %s, клиентом id=%d \n", i + 1, games[i].id, games[i].name, client->id);
			return &games[i];
		}
	}
	return NULL;
}

void destroyGame(struct game *game){
		printf("Игра (id)%d (%s) уничтожена.\n", game->id, game->name);	
		game->play = 0;
		bzero(game->name, sizeof(game->name));
		game->white = game->black = NULL;
}

void sendGameList(int sockfd){ // Отправка списка созданных игр, ожидающих второго игрока.
	int i, isGame = 0;
	for (i = 0; i < gamecount; i++){
		if(games[i].play == 1){
			char gameNumbAndName[42]; // Временное решение медленно перетекает в постоянный костыль
			sprintf(gameNumbAndName, "%d%c%s", i, 'G', games[i].name);
			sending(sockfd, GAMEADDR, gameNumbAndName);
			isGame = 1;
		}
	}
	if (isGame == 0){
		sending(sockfd, NOTGAMES, NULL);
	}
	sending(sockfd, ALLGAMES, NULL);
}

